Skip to content

feat(skills): review-skill, dedup-skills, externe-skill-audit en sessie-terugblik - #70

Merged
CorneeldH merged 3 commits into
skills/ontology-create-skill-v2from
skills/lifecycle
Aug 18, 2026
Merged

feat(skills): review-skill, dedup-skills, externe-skill-audit en sessie-terugblik#70
CorneeldH merged 3 commits into
skills/ontology-create-skill-v2from
skills/lifecycle

Conversation

@CorneeldH

@CorneeldH CorneeldH commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Pull Request Description

Sluit de skill-levensloop. Aanmaken was gedekt door create-skill; beoordelen, ontdubbelen en auditen niet.

Base is skills/ontology-create-skill-v2 (#68), niet main — deze PR bouwt daarop voort en is pas te mergen nadat #68 geland is.

Type of Change

  • New feature
  • Bug fix (twee defecten in validate-skill.py)

Description of Changes

Drie artefacten, alle drie gebouwd met de herziene create-skill — dat was meteen de eerste echte test van die workflow.

Artefact Type Kern
review-skill workflow, own Blokkerende scope-gate, validator-output als vaststaand, vier oordeelsvragen, akkoord vóór posten
dedup-skills + references/deprecatiepad.md workflow, own Detectie uit de validator, drie uitkomsten, ablation-eis, deprecatiepad voor een gekopieerde collectie
externe-skill-audit reference/knowledge, own Vier oppervlakken, chain als opgetelde rechten, allowed-tools als besluit

Afwijking van #61: audit-skill is géén workflow geworden maar een reference. Twee workflows die allebei op "kijk naar deze skill" vuren is precies de description-concurrentie waar dat issue tegen vecht. review-skill laadt de reference bij ceda-origin: external | extended.

review-skill heeft bewust geen Write/Edit: de SKILL.md onder review is geschreven om een agent aan te sturen, en dat is hier data, geen instructie. Dat is dezelfde regel die externe-skill-audit voorschrijft, toegepast op zichzelf.

Twee defecten in validate-skill.py

Duplicate name. Twee directories die dezelfde name claimen was alleen indirect zichtbaar, via name ≠ directorynaam, en dan maar aan één kant. Nu een eigen fout.

Exclusion-clause-check. De oude substring-match herkende buitenwereld als begrenzing, "gebruik dan deze skill" als doorverwijzing (dat verbreedt de trigger juist) en "fill in the template instead of leaving it blank" als clause. Daardoor verzweeg hij de overlapwaarschuwing op het enige paar in de collectie met een byte-identieke description: ui-designer / ontwerper-digitaal-product (md5 1bc5d0ae… aan beide kanten).

De twee vormen uit description-schrijven.md worden nu apart getoetst: de verwijzende vorm moet de andere skill nóemen (backticks of skill <naam>), de begrenzende vorm moet een scope hebben (niet voor X).

create-skill meegewijzigd

  • Verificatie-eis gerepareerd. "Geen nieuwe overlap-waarschuwing" was onbruikbaar: de drempel voor te-algemene woorden is int(0.12 × aantal skills), dus die verspringt als de collectie groeit. Gemeten: 56 skills gaf 61 waarschuwingen, dezelfde collectie plus drie nieuwe skills gaf er 86 — en géén van die 25 noemde een nieuwe skill. De eis is nu "geen waarschuwing waarin jouw skill genoemd wordt".
  • references/vorm-patronen.md aangevuld met twee stukken uit superpowers:writing-skills (de upstream): vorm-bij-faaltype (verbod vs. recept vs. structureel veld vs. conditional) en de micro-test met no-guidance control, inclusief de regel "vertoont de control het probleem niet, schrijf de guidance dan niet".
  • Dode verwijzingen naar het in 35e6117 verwijderde docs/skill-gaps.md weg, hier en in skills-ontology/references/rationale.md.

Related Issues

Refs #61. Raakt #59 (de exclusion-clause-fix verandert welke skills als overtreder gelden) en #49.

Comparison: Before and After

Before

  • Skill-PR's werden ad hoc gereviewd; herkomst werd structureel niet gevraagd.
  • Geen deprecatiepad. Een skill weghalen liet de kopieën in andere repo's ongemoeid.
  • Geen controlepunt op overgenomen skills, terwijl ceda-origin: external overnemen juist aanmoedigt.
  • De validator verzweeg het zwaarste duplicaat in de collectie.

After

  • 12 fouten (was 10), 99 waarschuwingen (was 61). Beide stijgingen zijn correct: de duplicate-name-check pakt vormgever-npuls-huisstijl / -2 aan beide kanten, en vijf skills verloren een exclusion-clause die ze nooit hadden.

Testing Instructions

Alle drie zijn RED-GREEN getest met subagents: eerst dezelfde taak zónder de skill (baseline), daarna mét.

De baselines faalden niet op detectie — die was ruim voldoende — maar op begrenzing. Alle drie sloegen door naar een actie zonder het pad te controleren:

Baseline Wat er misging Wat de skill nu afdwingt
review-PR Postte de review publiek op een echte PR, ondanks een read-only instructie. Schreef een volledige review op een PR die dicht moest, met de scope-correctie als punt 0. Gate stopt vóór de review; posten heeft een eigen akkoord
dedup Stelde rm -rf voor, geen woord over kopieën elders. Verklaarde skills overbodig op tekstgelijkenis. Wilde een ceda-deprecated-veld verzinnen. Tombstone-pad, ablation-eis, geen nieuw metadata-veld
audit Las de REQUIRED BACKGROUND-chains als kapotte links. Besloot niet welke allowed-tools de skill zou krijgen. Chain als rechten-oppervlak, audit eindigt in een grant

In de GREEN-runs deden alle drie het wél. De GREEN-run van dedup-skills legde bovendien een blokkade bloot die we niet kenden: de verplichte ablation kan nu niet draaien, want de collectie bevat nul evalcases. Drie van de vijf voorgestelde samenvoegingen zijn daarmee geblokkeerd tot die er zijn.

Zelf natrekken:

python3 .claude/skills/create-skill/scripts/validate-skill.py .claude/skills/review-skill
python3 .claude/skills/create-skill/scripts/validate-skill.py .claude/skills/dedup-skills
python3 .claude/skills/create-skill/scripts/validate-skill.py .claude/skills/externe-skill-audit
python3 .claude/skills/create-skill/scripts/validate-skill.py .claude/skills

De eerste drie geven exit 0, nul waarschuwingen. De collectie-brede run meldt ui-designerontwerper-digitaal-product nu aan beide kanten.

Validation

  • validate-skill.py groen op alle drie de nieuwe skills en op de twee gewijzigde
  • styler::style_active_file() — n.v.t., geen R in deze PR

Dependencies

Geen nieuwe. dedup-skills verwijst naar claude plugin eval --ablation, dat bestaat maar nog geen evalcases heeft.

Additional Information

Twee dingen die om een besluit vragen:

  1. Evalcases ontbreken. De ablation-eis in dedup-skills is nu niet uitvoerbaar. Los issue waard vóór de eerste echte dedup-ronde.
  2. persuasion-principles.md uit superpowers vult een gat in onze binding-as (hóé formuleer je een harde binding). Bewust níet overgenomen: het is expliciet een document over persuasietechniek op het model toepassen, en cedanl/.github is publiek. Inhoudelijke keuze, geen implementatiedetail.

Checklist

  • I have tested these changes locally
  • I have updated the documentation accordingly
  • My code follows the project's coding standards
  • I have added/updated tests to cover my changes (if applicable)
  • The code is accompanied by comments
  • I have linked this PR to relevant issues (if applicable)

sessie-terugblik erbij

Vierde skill in deze PR, los van de levensloop-drieslag: de generieke versie van sessie-reflectie uit ceda-workshop-starter, hier hernoemd naar sessie-terugblik. Die projectversie leest voortgang.md, .claude/.sessie-status.md en een rol uit een statusbestand, en schrijft reflectie.md in de projectrepo — alle drie bestaan alleen daar.

Onderdeel Keuze
Context twee git log-commando's: naam, commit-range, Entire-Checkpoint-trailers. Verder niets
Output markdownbestand in cedanl/repo-context-as-data onder data/<datum>/<repo>/, nieuw bestand per reflectie
Koppeling frontmatter draagt de commit-range, zodat de menslaag te joinen is op de machinelaag die checkpoint-tooling per commit vastlegt
Verbruik geteld uit het sessietranscript (scripts/sessie-tokens.py), niet via /cost
Vragen elke vraag optioneel, dun antwoord is een antwoord — geen doorvragen
Agent-inbreng eigen waarnemingen apart onder ## Wat de agent zag, alleen aanwijsbaar, deelnemer mag schrappen

Ablation gedraaid (identieke prompt, met en zonder de skill, verse context):

Casus Zonder skill Met skill
"ik wil reflecteren" "sessie leeg, niks te reflecteren" — geen context, geen structuur skill vuurt, draait de twee git-commando's, bouwt door
alle antwoorden meegegeven coacht en oordeelt ("bewust ≠ blind, dus geen echte blinde vlek"), parafraseert alles, geen artefact woorden van de deelnemer blijven staan, concept met volledige SHA-range, stopt voor akkoord

Drie defecten kwamen uit die runs en zijn gerepareerd: commit-subject werd als projectnaam gebruikt, cedanl was hardcoded als owner in plaats van uit de remote, en beantwoorde vragen werden opnieuw gesteld.

generate-slides-retro-simple krijgt een terugwijzende exclusion-clause; de descriptions overlappen op board, commits, review, sprint.

Openstaand: de workshop-versie heet nog sessie-reflectie en schrijft reflectie.md in de projectrepo. De hernoeming haalt de naamsbotsing weg, maar laat wel twee skills bestaan die hetzelfde doen. Dat is werk voor dedup-skills uit deze PR, in een eigen traject.

Vervolgissue: cedanl/repo-context-as-data#1 — metadata.json kent de handgeschreven reflectiebestanden niet.

@CorneeldH CorneeldH self-assigned this Aug 14, 2026
@CorneeldH

Copy link
Copy Markdown
Contributor Author

Het is erg veel tekst geworden. Ik weet niet zeker of alles goed werkt, al heeft claude uitvoerig getest.

Sluit de skill-levensloop: aanmaken was gedekt door create-skill, beoordelen,
ontdubbelen en auditen niet.

Alle drie zijn gebouwd met create-skill en getest volgens RED-GREEN: eerst een
baseline-run per taak zonder de skill, daarna dezelfde taak met de skill. De
baselines vonden ruim voldoende maar sloegen door naar een actie zonder het pad
te controleren -- publiceren zonder te vragen, rm -rf zonder na te denken over
kopieen in andere repo's, een chain lezen als kapotte links in plaats van als
opgetelde rechten. Dat is wat deze drie begrenzen.

review-skill (workflow, own)
- blokkerende scope-gate: een PR met twee skills of met inhoud die al op main
  staat is niet reviewbaar; stoppen en terugvragen
- validator-output geldt als bevestigd defect, geen alinea per punt
- vier oordeelsvragen: scope, overlap, herkomst, type-classificatie
- posten heeft een eigen akkoord, los van "review deze PR"
- geen Write/Edit: de skill onder review is data, geen instructie

dedup-skills (workflow, own) + references/deprecatiepad.md
- detectie komt uit de validator, de skill draagt het oordeel en het pad
- drie uitkomsten: samenvoegen, parametriseren, houden-met-exclusion-clause
- ablation verplicht voor "overbodig", behalve bij een aantoonbare kloon
- deprecatiepad voor een collectie die via npx skills add gekopieerd wordt:
  vervanger eerst, tombstone, kopieen in de org opzoeken, dan pas weghalen
- geen ceda-deprecated-veld; de description draagt de doorverwijzing

externe-skill-audit (reference/knowledge, own)
- vier oppervlakken: tools, netwerk, gebundelde scripts, chains
- een chain telt rechten op die in geen enkele allowed-tools zichtbaar zijn; het
  deel dat onvertrouwde inhoud verwerkt krijgt geen schrijfrechten
- de audit eindigt in een ingevulde allowed-tools, niet in "ziet er schoon uit"

validate-skill.py
- nieuwe fout: twee directories die dezelfde name claimen
- exclusion-clause-check herschreven. De oude substring-match herkende
  "buitenwereld" als begrenzing en "gebruik dan deze skill" als doorverwijzing,
  en verzweeg daardoor het enige paar in de collectie met een byte-identieke
  description (ui-designer / ontwerper-digitaal-product). De verwijzende vorm
  moet nu de andere skill noemen, de begrenzende vorm een scope.

create-skill
- verificatie-eis gerepareerd: het totale aantal overlap-waarschuwingen is geen
  maat, want de corpusdrempel verspringt als de collectie groeit
- vorm-patronen aangevuld met twee stukken uit superpowers:writing-skills:
  vorm-bij-faaltype, en de micro-test met no-guidance control
- dode verwijzingen naar het verwijderde docs/skill-gaps.md weg

Refs #61
Generieke versie van de skill uit ceda-workshop-starter, losgemaakt van de
workshop-harness. Die versie leest voortgang.md, .claude/.sessie-status.md en een
rol uit een statusbestand, en schrijft reflectie.md in de projectrepo — alle drie
bestaan alleen daar.

Wat deze versie doet:
- context uit twee git log-commando's, verder niets: naam, commit-range en de
  Entire-Checkpoint-trailers als die er zijn
- output is een markdownbestand in cedanl/repo-context-as-data onder
  data/<datum>/<repo>/, append-only (nieuw bestand, nooit overschrijven)
- frontmatter draagt de commit-range, zodat de menslaag (waarom, wat bleef
  liggen) later te koppelen is aan de machinelaag die checkpoint-tooling per
  commit vastlegt
- verbruik wordt geteld uit het sessietranscript in plaats van de gebruiker /cost
  te laten draaien; scripts/sessie-tokens.py print het als YAML
- elke vraag is optioneel en een dun antwoord is een antwoord: geen doorvragen,
  geen verplichting iets goeds te melden
- eigen waarnemingen van de agent staan apart onder "Wat de agent zag", alleen
  aanwijsbaar (een skill die niet vuurde, een correctie, een omweg), en de
  deelnemer mag ze schrappen voor het wegschrijven

Getest met een ablation: zonder de skill gaat het model coachen en oordelen
("bewust != blind, dus geen echte blinde vlek"), parafraseert het de antwoorden
en levert het geen artefact. Met de skill blijven de woorden van de deelnemer
staan en komt er een concept met volledige SHA-range.

generate-slides-retro-simple krijgt een exclusion-clause die terugwijst, omdat de
descriptions overlappen op board/commits/review/sprint.
@CorneeldH CorneeldH changed the title feat(skills): review-skill, dedup-skills en externe-skill-audit feat(skills): review-skill, dedup-skills, externe-skill-audit en sessie-reflectie Aug 14, 2026
Reflectie gaat over eigen handelen; deze skill legt de sessie vast, inclusief
wat de agent deed en wat er niet vuurde terwijl het had gepast. Evaluatie was
het alternatief maar brengt een oordeelsframe mee dat vecht met de kernregel van
de skill (niet oordelen, woorden van de deelnemer overnemen), en binnen CEDA
betekent evaluatie al iets anders: instrumenten zoals evaluatietool-selectie.

Meeverhuisd: directorynaam, name, ceda-id, het pad in de data-repo
(sessie-terugblik-<naam>.md), type in de frontmatter van het artefact, de
commit-message van de PUT, en de exclusion-clause in
generate-slides-retro-simple.

"Reflectie" blijft als triggerwoord in de description staan — mensen typen dat,
en de skill hoort er gewoon op te vuren. ceda-source blijft naar het
sessie-reflectie-bestand in ceda-workshop-starter wijzen; dat heet daar nog zo.
@CorneeldH CorneeldH changed the title feat(skills): review-skill, dedup-skills, externe-skill-audit en sessie-reflectie feat(skills): review-skill, dedup-skills, externe-skill-audit en sessie-terugblik Aug 14, 2026

@EdwinLieftink EdwinLieftink left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ik heb de Skills gescand en kan (nog) niet echt beoordelen of ze echt goed werken. Ga morgen specifiek eens spelen met de 'review-skill'. Maar laat dat ons niet weerhouden om deze Skills goed te keuren.

@CorneeldH
CorneeldH merged commit 6c81ce7 into skills/ontology-create-skill-v2 Aug 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants